package ar.edu.unicen.exa.isistan.archassis.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.io.Writer;
import java.net.URL;

import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;

public class JarResource {
	
	private static JarResource instance = null;
	
	private JarResource() {}
	
	public static JarResource getInstance() {
		if (instance == null) {
			instance = new JarResource();
		}
		return instance;
	}

	public InputStream getResourceStream(String path) {
		System.out.println("JarResource.getResourceStream:" + path);
		ClassLoader classLoader = getClass().getClassLoader();
		return classLoader.getResourceAsStream(path);
	}
	public URL getResourceURL(String path) {
		ClassLoader classLoader = getClass().getClassLoader();
		return classLoader.getResource(path);
	}
	public Image getResourceImage(Display display, String img) {
		InputStream is = JarResource.getInstance().getResourceStream("img/" + img + ".png");
		Image image = new Image(display, is);
		return image;
	}
	public String getResourceString(String path) {
		InputStream is = getResourceStream(path);
		try {
			return convertStreamToString(is);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "";
	}

	private String convertStreamToString(InputStream is) throws IOException {
		/*
		 * To convert the InputStream to String we use the
		 * Reader.read(char[] buffer) method. We iterate until the
		 * Reader return -1 which means there's no more data to
		 * read. We use the StringWriter class to produce the string.
		 */
		if (is != null) {
			Writer writer = new StringWriter();

			char[] buffer = new char[1024];
			try {
				Reader reader = new BufferedReader(
						new InputStreamReader(is, "UTF-8"));
				int n;
				while ((n = reader.read(buffer)) != -1) {
					writer.write(buffer, 0, n);
				}
			} finally {
				is.close();
			}
			return writer.toString();
		} else {        
			return "";
		}
	}
}